package br.com.leopard.erp.gym.negocio.empresa;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Named;

import br.com.leopard.erp.gym.dao.empresa.EmpresaModuloDAO;
import br.com.leopard.erp.gym.exception.NenhumResultadoEncontradoException;
import br.com.leopard.erp.gym.mapeamento.base_sistema.Modulo;
import br.com.leopard.erp.gym.mapeamento.empresa.Empresa;
import br.com.leopard.erp.gym.mapeamento.empresa.EmpresaModulo;
import br.com.leopard.erp.gym.negocio.AbstractNegocio;
import br.com.leopard.erp.gym.negocio.excessoes.SaveException;

@Named
@ConversationScoped
public class EmpresaModuloNegocio extends AbstractNegocio<EmpresaModulo, Long> implements Serializable {

	private static final long serialVersionUID = 1L;

	@EJB
	private EmpresaModuloDAO empresaModuloDAO;

	@PostConstruct
	private void init() {
		super.setDao(empresaModuloDAO);
	}

	public void inativarTodosModulos(Empresa empresa) {
		empresaModuloDAO.inativarModulosDeEmpresa(empresa);
	}

	public EmpresaModulo getByEmpresaEModulo(Empresa empresa, Modulo modulo) throws NenhumResultadoEncontradoException {
		return empresaModuloDAO.getByEmpresaEModulo(empresa, modulo);
	}

	public void salvarModulosParaEmpresa(Empresa empresaSelecionada, List<Modulo> modulosSelecionadosList) throws SaveException {
		this.inativarTodosModulos(empresaSelecionada);

		for (int i = 0; i < modulosSelecionadosList.size(); i++) {
			Modulo modulo = modulosSelecionadosList.get(i);

			salvarEmpresaModulo(empresaSelecionada, modulo);
		}
	}

	private void salvarEmpresaModulo(Empresa empresaSelecionada, Modulo modulo) throws SaveException {
		try {
			EmpresaModulo empresaModulo = this.getByEmpresaEModulo(empresaSelecionada, modulo);

			this.ativar(empresaModulo);
		} catch (NenhumResultadoEncontradoException e) {
			EmpresaModulo empresaModulo = new EmpresaModulo();
			empresaModulo.setEmpresa(empresaSelecionada);
			empresaModulo.setModulo(modulo);

			this.save(empresaModulo);
			this.ativar(empresaModulo);
		}
	}

}
